home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / PATHS.I < prev    next >
Encoding:
Text File  |  1991-04-25  |  7.0 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE Paths; (* V#077 *)⓪ ⓪ (*$Y+,R-*)⓪ ⓪ (*⓪ IMPORT TOSDebug;⓪ *)⓪ ⓪ (*⓪ 01.04.88: TT  SearchFile: wenn Abbruch bei fileselect, wird Leername⓪0geliefert; kein Stringoverflow bei '?'/OK.⓪ 02.08.89: TT  Append durch Assign ersetzt⓪ 04.05.90  TT  SearchFile: leerer Dateiname führt nicht mehr zur Suche⓪ 12.05.90  TT  Aufruf von Fileselector übernimmt Namen nun endlich wieder⓪ 16.05.90  TT  Validate bei SetHomePath⓪ 25.06.90  TT  Aufteilung in Paths/PathEnv/PathCtrl⓪ 11.11.90  TT  Wenn Datei gefunden, wird trotzdem Fsnext aufgerufen, um⓪.GEMDOS-Strukturen zurückzusetzen⓪ 25.04.91  TT  Fsnext nur noch bei TOS 1.0 & 1.2⓪ *)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADR, ADDRESS;⓪ ⓪ FROM Lists IMPORT NextEntry, EndOfList, ResetList, ListEmpty, LCarrier;⓪ ⓪ FROM MOSGlobals IMPORT PathStr, FileStr, NameStr, MemArea;⓪ ⓪ FROM Directory IMPORT DefaultDrive, GetDefaultPath,⓪(DTA, GetDTA, SetDTA, MakeFullPath, DirEntry, GetDTAEntry;⓪ ⓪ FROM FileNames IMPORT DriveToStr, SplitPath, ConcatPath, ValidatePath;⓪ ⓪ IMPORT Strings, FastStrings;⓪ ⓪ FROM PathCtrl IMPORT PathList;⓪ ⓪ FROM PathEnv IMPORT SelectFile, ReplaceHome;⓪ ⓪ FROM Storage IMPORT ALLOCATE, DEALLOCATE;⓪ ⓪ ⓪ VAR needFsnext, ok: BOOLEAN;⓪ ⓪ PROCEDURE check ( REF name: ARRAY OF CHAR ): BOOLEAN;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪((*⓪(TST.W   TOSDebug.Hex⓪(BEQ     noBrk⓪(BREAK⓪&noBrk⓪(*)⓪(MOVE.W  -(A3),D0⓪(MOVE.L  -(A3),A0⓪(CLR.B   0(A0,D0.W)      ; Null an Namensende⓪(CLR.W   -(A7)           ; attrib, only files⓪(MOVE.L  A0,-(A7)        ; ^name⓪(MOVE    #$4E,-(A7)⓪(TRAP    #1              ; FSFIRST⓪(ADDQ.L  #8,A7⓪(TST.L   D0⓪(SPL     D0⓪(ANDI    #1,D0⓪(MOVE    D0,(A3)+⓪$END;⓪"END check;⓪"(*$L=*)⓪ ⓪ PROCEDURE checkNext; (* gibt DTA-Puffer wieder frei, indem bis zum Ende⓪6* gesucht wird *)⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(TST.W   needFsnext⓪(BEQ     ende⓪&again⓪(MOVE    #$4F,-(A7)⓪(TRAP    #1              ; Fsnext⓪(ADDQ.L  #2,A7⓪(TST.L   D0⓪(BPL     again⓪&ende⓪$END;⓪"END checkNext;⓪"(*$L=*)⓪ ⓪ (*$D-*)⓪ ⓪ PROCEDURE prepare (VAR name: ARRAY OF CHAR; VAR fsel: BOOLEAN);⓪"BEGIN⓪$ReplaceHome (name);⓪$fsel:= (name[0] = FSelSymbol);⓪$IF fsel THEN⓪&Strings.Delete (name, 0, 1, ok)⓪$END;⓪"END prepare;⓪ ⓪ PROCEDURE getName (dta: DTA; VAR resultName: ARRAY OF CHAR);⓪"VAR entry: DirEntry;⓪"BEGIN⓪$GetDTAEntry (dta, entry);⓪$ConcatPath (resultName, entry.name, resultName)⓪"END getName;⓪ ⓪ PROCEDURE doFSel (REF  firstPath: ARRAY OF CHAR;⓪2dta: DTA;⓪2VAR pathName, name: ARRAY OF CHAR;⓪2VAR resultName: ARRAY OF CHAR;⓪2VAR abort, found: BOOLEAN );⓪"VAR sfx: ARRAY [0..3] OF CHAR; res: INTEGER; ok: BOOLEAN;⓪"BEGIN⓪$FastStrings.Copy ( name, Strings.PosLen ('.',name,1), 4, sfx );⓪$IF (pathName[0]=0C) AND (firstPath[0]#0C) THEN⓪&Strings.Assign (firstPath, pathName, ok);⓪$END;⓪$MakeFullPath (pathName, res);⓪$IF res < 0 THEN⓪&GetDefaultPath (pathName);⓪$END;⓪$IF sfx[0]=0C THEN sfx:= '.*' END;⓪$Strings.Append ('*', pathName, ok);⓪$FastStrings.Append (sfx, pathName);⓪$SelectFile ('',pathName,name,ok);⓪$IF ok THEN⓪&abort:= FALSE;⓪&ConcatPath ( pathName, name, resultName );⓪&found:= check (resultName);⓪&IF found THEN getName (dta, resultName); checkNext END⓪$ELSE⓪&abort:= TRUE;⓪&found:= FALSE;⓪&resultName[0]:= 0C (* bei Abbruch keinen Namen liefern *)⓪$END;⓪"END doFSel;⓪ ⓪ PROCEDURE SearchFile ( REF iname: ARRAY OF CHAR; VAR path: PathList; start: ListPos;⓪7VAR found: BOOLEAN; VAR resultName: ARRAY OF CHAR );⓪ ⓪"VAR pathName, firstPath: PathStr; firstname: FileStr;⓪&name: ARRAY [0..11] OF CHAR;⓪&p: POINTER TO PathStr; fsel, abort, firstChecked: BOOLEAN;⓪&olddta, dta: DTA;⓪ ⓪"PROCEDURE find (VAR path: ARRAY OF CHAR): BOOLEAN;⓪$BEGIN⓪&FastStrings.Concat (path,name,resultName);⓪&found:= check (resultName);⓪&IF found THEN getName (dta, resultName); checkNext END;⓪&RETURN found⓪$END find;⓪ ⓪"PROCEDURE myFSel;⓪$BEGIN⓪&doFSel (firstPath, dta, pathName, name, resultName, abort, found)⓪$END myFSel;⓪ ⓪"PROCEDURE clrup;⓪$BEGIN⓪&DISPOSE (dta);⓪&SetDTA (olddta)⓪$END clrup;⓪ ⓪"BEGIN⓪$found:= FALSE;⓪$⓪$(*⓪$IF Strings.StrEqual ('RUNTIME.DEF', iname) THEN⓪&TOSDebug.Active:= TRUE;⓪&TOSDebug.Step:= 0⓪$END;⓪$*)⓪$⓪$FastStrings.Assign (iname, firstname);⓪$prepare (firstname, fsel);⓪$SplitPath (firstname, firstPath, name);⓪$IF name [0] = 0C THEN⓪&resultName[0]:= 0C;⓪&RETURN⓪$END;⓪$⓪$GetDTA (olddta);⓪$NEW (dta);⓪$IF dta # NIL THEN SetDTA (dta) END;⓪$⓪$pathName:= '';⓪$firstChecked:= (start=fromStart);⓪$IF firstChecked THEN⓪&ResetList (path);⓪&IF fsel THEN⓪(myFSel;⓪(IF abort OR found THEN clrup; RETURN END⓪&ELSIF ListEmpty (path) OR (firstPath[0]#0C) THEN⓪((* Zuerst angegebenen Path prüfen *)⓪(IF find (firstPath) THEN clrup; RETURN END;⓪&END⓪$END;⓪$(* Jetzt die PathList durchsuchen *)⓪$LOOP⓪&p:= NextEntry(path);⓪&IF p=NIL THEN EXIT END;⓪&FastStrings.Assign (p^, pathName);⓪&prepare (pathName, fsel);⓪&ValidatePath (pathName);⓪&IF fsel THEN⓪(myFSel;⓪(IF abort OR found THEN clrup; RETURN END⓪&ELSE⓪(IF ~ (firstChecked & Strings.StrEqual (firstPath,pathName) )⓪(AND find (pathName) THEN clrup; RETURN END⓪&END⓪$END;⓪$clrup;⓪$Strings.Assign(firstname,resultName,ok)⓪"END SearchFile;⓪ ⓪ (*$D-*)⓪ ⓪ PROCEDURE MakeFullName ( VAR name: ARRAY OF CHAR; maySelect: BOOLEAN; VAR ok: BOOLEAN );⓪"VAR shortname: NameStr; pathName: PathStr; res: INTEGER; olddta, dta: DTA;⓪&abort, fsel: BOOLEAN;⓪"BEGIN⓪$ok:= TRUE;⓪$GetDTA (olddta);⓪$NEW (dta);⓪$IF dta # NIL THEN SetDTA (dta) END;⓪$prepare (name, fsel);⓪$IF maySelect & fsel THEN⓪&SplitPath (name, pathName, shortname);⓪&doFSel ('', dta, pathName, shortname, name, abort, ok)⓪$END;⓪$MakeFullPath (name, res);⓪$IF ok AND (res >= 0) THEN⓪&ok:= check (name);⓪&IF ok THEN getName (dta, name); checkNext END⓪$ELSE⓪&ok:= FALSE⓪$END;⓪$DISPOSE (dta);⓪$SetDTA (olddta)⓪"END MakeFullName;⓪ ⓪ PROCEDURE FullName ( REF name: ARRAY OF CHAR; maySelect: BOOLEAN ): FileStr;⓪"VAR fullname: FileStr;⓪"BEGIN⓪$Strings.Assign (name, fullname, ok);⓪$MakeFullName (fullname, maySelect, ok);⓪$RETURN fullname⓪"END FullName;⓪ ⓪ BEGIN⓪"ASSEMBLER⓪(BRA     c⓪%t: MOVE.L  $4F2,A0         ; ^TOS-Header⓪(MOVE.L  8(A0),D0        ; wg. altem AHDI⓪(RTS⓪%c: PEA     t(PC)⓪(MOVE    #38,-(A7)⓪(TRAP    #14             ; Supexec⓪(ADDQ.L  #6,A7⓪(MOVE.L  D0,A0⓪(MOVE.W  2(A0),D1⓪(CMPI    #$0104,D1⓪(SCS     D0⓪(ANDI    #1,D0⓪(MOVE    D0,needFsnext⓪"END⓪ END Paths.⓪ ə
  2. (* $FFF8727B$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFED4934$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$00000FD8$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105Ç$00000291T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00001947$00001922$00000768$0000074F$00000768$000007DC$00000768$000004D5$000001F6$00000294$00000267$00000270$00000291$00001825$00001919$00001951œÇâ*)
  3.